﻿# Программа для импорта документов из базы данных OpenERP production на sa-pc265
# в базу данных OpenERP production на sa-serv8

import postgresql

print('Будет выполнен импорт документов из базы данных OpenERP production на sa-pc265 в базу данных OpenERP production на sa-serv8')

a=input('Введите "y" для продолжения...')

if a!='y' and a!='Y' : 
	print ('Вы отказались. Импорт выполнен не был. До свидания!')
else :

	db_old_production = postgresql.open("pq://openpg:openpgpwd@sa-pc265/production")

	db_new_production = postgresql.open("pq://palo:palo@sa-serv8/production")


	#1 --Импорт таблицы ir_attachment

	select_db_old_production_ir_attachment_1 = db_old_production.prepare("SELECT a.create_date, a.write_date, a.description, a.datas_fname, a.url, a.res_model, a.company_id, a.res_name, a.type, a.res_id, a.file_size, a.db_datas, a.store_fname, a.name, a.file_type, b.login FROM ir_attachment a, res_users b WHERE a.user_id=b.id")

	insert_db_new_production_ir_attachment_ = db_new_production.prepare("INSERT INTO ir_attachment(create_date, write_date, description, datas_fname, url, res_model, company_id, res_name, type, res_id, file_size, db_datas, store_fname, name, file_type, index_content) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)")

	insert_db_new_production_ir_attachment_.load_rows(select_db_old_production_ir_attachment_1())

	#2 - Обновление полей: 

	# ИЗ create_uid, write_uid, partner_id, user_id, index_content, x_date, x_division, x_kind, x_number

	# В create_uid, write_uid, partner_id, user_id, index_content

	# ("SELECT id, create_uid, write_uid, partner_id, user_id, index_content, x_date, x_division, x_kind, x_number FROM ir_attachment")

	#2.1. Обновление полей create_uid, write_uid, user_id

	# Выбираются пары res_users.id - res_users.login для всех ir_attachment.user_id

	select_db_new_production_ir_attachment_user_id_login = db_new_production.prepare("SELECT DISTINCT id, login FROM res_users WHERE login IN (SELECT DISTINCT index_content FROM ir_attachment)")
	#select_db_new_production_ir_attachment_user_id_login()

	# По полю index_content, в которое при первичной передаче документов записывается login пользователя соответствующего документа, в соответствии с парами res_users.id - res_users.login

	# Обновляется поле create_uid 

	update_db_new_production_ir_attachment_create_uid = db_new_production.prepare("UPDATE ir_attachment SET create_uid = $1 WHERE index_content=$2")
	for row in select_db_new_production_ir_attachment_user_id_login():
		update_db_new_production_ir_attachment_create_uid(row["id"],row["login"])

	# Обновляется поле write_uid 

	update_db_new_production_ir_attachment_write_uid = db_new_production.prepare("UPDATE ir_attachment SET write_uid = $1 WHERE index_content=$2 AND write_date IS NOT NULL")
	for row in select_db_new_production_ir_attachment_user_id_login():
		update_db_new_production_ir_attachment_write_uid(row["id"],row["login"])

	# Обновляется поле user_id 

	update_db_new_production_ir_attachment_user_id = db_new_production.prepare("UPDATE ir_attachment SET user_id = $1 WHERE index_content=$2")
	for row in select_db_new_production_ir_attachment_user_id_login():
		update_db_new_production_ir_attachment_user_id(row["id"],row["login"])


	#2.2. Обновление поля partner_id

	# Обновление поля ir_attachment.index_content значением поля res_partner.name


	select_db_old_production_ir_attachment_2 = db_old_production.prepare("SELECT b.name, c.login, a.name, a.datas_fname FROM ir_attachment a, res_partner b, res_users c WHERE a.partner_id=b.id AND c.id=a.user_id")

	update_db_new_production_ir_attachment_1 = db_new_production.prepare("UPDATE ir_attachment SET index_content = $1 WHERE index_content=$2 AND name=$3 AND datas_fname=$4")
	for row in select_db_old_production_ir_attachment_2():
		update_db_new_production_ir_attachment_1(row[0],row[1],row[2],row[3])

	# Выбираются пары res_partner.id - res_partner.name для всех ir_attachment.index_content

	select_db_new_production_ir_attachment_partner_id_name = db_new_production.prepare("SELECT DISTINCT id, name FROM res_partner WHERE x_1s_id IS NOT NULL AND name IN (SELECT DISTINCT index_content FROM ir_attachment)")
	#select_db_new_production_ir_attachment_partner_id_name()

	# По полю index_content, в которое после обновления находится name контрагента соответствующего документа, в соответствии с парами res_partner.id - res_partner.name

	# Обновляется поле partner_id 

	update_db_new_production_ir_attachment_partner_id = db_new_production.prepare("UPDATE ir_attachment SET partner_id = $1 WHERE index_content=$2")
	for row in select_db_new_production_ir_attachment_partner_id_name():
		update_db_new_production_ir_attachment_partner_id(row["id"],row["name"])


	#2.3. Обновление поля index_content

	# Обновление поля ir_attachment.index_content значениями полей index_content -- res_partner.name -- x_kind -- x_number -- x_date


	select_db_old_production_ir_attachment_3 = db_old_production.prepare("SELECT index_content || '--' || b.name || '--' || x_kind || '--' || x_number || '--' || x_date, a.name, a.datas_fname FROM ir_attachment a, res_partner b WHERE a.partner_id=b.id")
	#select_db_old_production_ir_attachment_3()

	# По полям ir_attachment.name, ir_attachment.datas_fname обновляется поля index_content

	update_db_new_production_ir_attachment_2 = db_new_production.prepare("UPDATE ir_attachment SET index_content = $1 WHERE name=$2 AND datas_fname=$3")
	for row in select_db_old_production_ir_attachment_3():
		update_db_new_production_ir_attachment_2(row[0],row[1],row[2])


	#2.4. Замена в поле index_content ('act','Акт'),('invoice','Товарная накладная'),('bill','Счет'),('billoflading','Счет-фактура'),('pay','Платежное порученое')

	update_db_new_production_ir_attachment_3act = db_new_production.prepare("UPDATE ir_attachment SET index_content=replace(index_content,'act','Акт')")
	update_db_new_production_ir_attachment_3act()

	update_db_new_production_ir_attachment_3invoice = db_new_production.prepare("UPDATE ir_attachment SET index_content=replace(index_content,'invoice','Товарная накладная')")
	update_db_new_production_ir_attachment_3invoice()

	update_db_new_production_ir_attachment_3bill = db_new_production.prepare("UPDATE ir_attachment SET index_content=replace(index_content,'bill','Счет') WHERE index_content NOT LIKE '%billoflading%'")
	update_db_new_production_ir_attachment_3bill()

	update_db_new_production_ir_attachment_3billoflading = db_new_production.prepare("UPDATE ir_attachment SET index_content=replace(index_content,'billoflading','Счет-фактура')")
	update_db_new_production_ir_attachment_3billoflading()

	update_db_new_production_ir_attachment_3pay = db_new_production.prepare("UPDATE ir_attachment SET index_content=replace(index_content,'pay','Платежное порученое')")
	update_db_new_production_ir_attachment_3pay()

	print('Импорт документов из базы данных OpenERP production на sa-pc265 в базу данных OpenERP production на sa-serv8 завершен!')